IDEA远程DEBUG调试,在测试环境用本地代码进行DEBUG!!! 您所在的位置:网站首页 wince 远程调试 IDEA远程DEBUG调试,在测试环境用本地代码进行DEBUG!!!

IDEA远程DEBUG调试,在测试环境用本地代码进行DEBUG!!!

2024-02-02 04:25| 来源: 网络整理| 查看: 265

背景

        我们日常工作中,难免会遇到这样场景的问题,明明在本地测试没有任何问题,为什么一到测试环境、开发环境就抛异常了呢?这到底是道德的沦丧?还是人性的扭曲?

        那么此时此刻,如果产生该业务BUG的流程过于冗长,在本地复现时间复杂度高,且复现环境使用的数据差距较大,开发只能追着各个服务的日志文件一一查看,根据日志翻阅一行行的代码去猜测参数变更,猜测数据走向。过程无疑是极其缓慢的,那么有没有更简单、更方便、更舒适、更快乐、更容易让自己多摸鱼一会儿的方法呢?答案无疑是有的。那么开始吧

 简述

        本地DEBUG调试是IDEA自带的功能,无需任何插件与工具。非常方便,但是有个硬性要求,需要开放该服务器的端口,这样才能在本地进行监听断点调试。

        当你还在一行一行查看各个服务的日志时候,你的同事已经打上断点进行DEBUG分析了。这就好比,你还在拿镰刀收割麦子,别人已经上大型收割机了。顿时就感觉凉了呀!

 实战

实战代码仓库地址:https://gitee.com/yiang-hz/blog.git 目标项目:blog -> tips -> remote-debug

PS:直接拉取项目可以直接跳过该小节,前往调试小节

  步骤1:创建项目

        首先我们创建任意一个Maven项目,在pom文件添加Maven依赖与打包插件

org.springframework.boot spring-boot-starter-parent 2.4.2 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-maven-plugin

 步骤2:创建接口与启动类

         DemoController与RemoteDebugApp

@RestController public class DemoController { @GetMapping("/debug/{id}") public String testDebug(@PathVariable("id") String id) { //请求示例:http://127.0.0.1:8168/debug/1 System.out.println("Request Param: id = " + id); return "success: id = " + id; } } @SpringBootApplication public class RemoteDebugApp { public static void main(String[] args) { SpringApplication.run(RemoteDebugApp.class, args); } }

步骤3:配置端口,可不配置则使用默认端口

        创建application.yml文件,配置

server: port: 8168 调试

        配置好项目或者拉取了代码之后,我们开始调试吧!

 步骤1:测试打包       

        首先我们本地启动项目,运行访问 http://127.0.0.1:8168/debug/1 即可看到返回

        IDEA启动可访问之后, 我们再打包Maven工具侧边栏可在IDEA最右侧找到。

 

         日志栏查看打包路径,即可找到对应Jar

 步骤2:配置Remote

        1.选择Edit Configurations...

         2.点击“+”找到Remote单击添加

 

         3.配置并保存,备注:如果需要变更启动名称:在下图Name:一栏可以修改

        以上即配置好了,我们在本地启动项目,并且复制上方 Command line ...JVM 一栏的配置

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005

具体参数详解:

-Xdebug 使JVM以DEBUG模式运行。

-Xrunjdwp 使JVM使用(Java debug wire protocol)运行调试环境,该参数包含一系列的调试选项。

transport 指定了调试数据的传送方式,dt_socket是指用SOCKET模式,另有dt_shmem指用共享内存方式,其中,dt_shmem只适用于Windows平台。

address 调试服务器暴露出给客户端连接的端口号,可任意设置。非启动端口。

server=y/n JVM 是否需要作为调试服务器执行。

suspend=y/n 是否在调试客户端建立连接之后启动 JVM。

 步骤3:本地启动Jar,带上启动监控参数

        切到jar存在的目录,输入命令运行,如果在IDEA启动了则需要关闭,避免启动端口冲突

java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 remote-debug-1.0.jar

        cmd启动该jar,可以看到监听端口为5005

 步骤4:启动IDEA中配置好的Remote,可以看到链接信息

 步骤5:断点调试

        可以看到再次访问 http://127.0.0.1:8168/debug/1 之后,能够直接通过IDEA断点调试本地java-jar启动的项目了

         如上,服务器同理。

总结

        以上即是远程调试的方式,实现比较简单,这里描述的较为基础详细,希望有帮到大家。 

同理,如果部分公司不允许远程调试操作,我们可以使用阿里巴巴开源项目监控工具Arthas去进行分析。不过入门、使用起来较为复杂。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有